package com.example.rabbitmqbootproducer.service;

import com.example.rabbitmqbootproducer.dto.MessageDTO;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
 * 发送消息
 *
 * @author 伯路平
 * @since 2023/6/19
 **/
@Validated
public interface SendMessageService {
    /**
     * 发送直连消息
     *
     * @param messageDTO 消息体
     */
    void sendDirectMessage(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);

    /**
     * 发送广播消息
     *
     * @param messageDTO 消息体
     */
    void sendFanoutMessage(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);

    /**
     * 给不存在的交换机发送消息查看回调 （结果：调用的的是confirmCallback函数）
     *
     * @param messageDTO 消息体
     */
    void sendNotExistExchange(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);

    /**
     * 给不存在的队列发送消息查看回调 （结果：调用的的是confirmCallback,returnsCallback函数）
     *
     * @param messageDTO 消息体
     */
    void notBindingQueue(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);

    /**
     * 给错误绑定的交换机和队列发送消息
     *
     * @param messageDTO 消息体
     */
    void errorBindingQueue(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);


    /**
     * 给延迟队列发送消息
     *
     * @param messageDTO 消息体
     */
    void expiredQueue(@NotNull(message = "消息体不能为空") @Valid MessageDTO messageDTO);
}
